package com.fastloan.safe.mgt.root.service;

import com.fastloan.safe.mgt.root.model.CmDefFun;
import com.fastloan.safe.mgt.root.model.vo.DefFunTreeVo;
import com.fastloan.safe.mgt.root.model.vo.DefFunVo;
import com.kawins.base.BaseService;

import java.util.List;
import java.util.Map;

public interface CmDefFunService extends BaseService<CmDefFun> {

    String TOP_FUN_PARENT_ID = "0";

    /**
     * 功能模块分页列表
     *
     * @param map
     * @return
     */
    List<DefFunVo> pageList(Map<String, Object> map);

    /**
     * 增加功能,带排序
     *
     * @param cmDefFun
     * @param apiIds
     * @param menuIds
     */
    void insertForShort(CmDefFun cmDefFun, String[] apiIds, String[] menuIds);

    /**
     * 更新功能
     *
     * @param cmDefFun
     * @param apiIds
     * @param menuIds
     */
    void updateForShort(CmDefFun cmDefFun, String[] apiIds, String[] menuIds);

    /**
     * 获取全部功能树
     *
     * @param isAdmin 是否为系统功能
     * @return
     */
    List<DefFunTreeVo> selectAll2Tree(boolean isAdmin);

    /**
     * 根据角色获取全部功能树,并确定是否选中
     *
     * @param defRoleId
     * @param isAdmin   是否为系统功能
     * @return
     */
    List<DefFunTreeVo> selectAll2TreeCheck(String defRoleId, boolean isAdmin);

    /**
     * 根据顶级功能ID获取所有子功能
     *
     * @param funId
     * @param hasSelf true:包含自己
     * @return
     */
    List<DefFunTreeVo> selectAllSonByTop(String funId, boolean hasSelf);


    /**
     * 根据用户ID获取用户拥有的功能
     *
     * @param userId
     * @return
     */
    List<CmDefFun> selectByUserId(String userId);

    /**
     * 根据机构获取顶级功能列表
     *
     * @return
     */
    List<CmDefFun> selectTopByOrg(String orgId);

    /**
     * 删除功能
     *
     * @param cmDefFunId
     */
    void deleteAll(String cmDefFunId);
}